Bug 596250 - Gdkcursor-quartz.c doesn't implement GDK_BLANK_CURSOR
authorKristian Rietveld <kris@gtk.org>
Fri, 25 Sep 2009 16:16:06 +0000 (18:16 +0200)
committerKristian Rietveld <kris@gtk.org>
Fri, 25 Sep 2009 16:51:55 +0000 (18:51 +0200)
Support GDK_BLANK_CURSOR.  Patch by John Ralls.

gdk/quartz/gdkcursor-quartz.c

index 2431eb8aa40a613fe3a02e0788ac9d98e4e6b6a7..651952f0c1754cc4c1709738d18203ac855662d0 100644 (file)
@@ -45,6 +45,21 @@ gdk_quartz_cursor_new_from_nscursor (NSCursor      *nscursor,
   return cursor;
 }
 
+static GdkCursor *
+create_blank_cursor (void)
+{
+  NSCursor *nscursor;
+  NSImage *nsimage;
+  NSSize size = { 1.0, 1.0 };
+
+  nsimage = [[NSImage alloc] initWithSize:size];
+  nscursor = [[NSCursor alloc] initWithImage:nsimage
+                               hotSpot:NSMakePoint(0.0, 0.0)];
+  [nsimage release];
+
+  return gdk_quartz_cursor_new_from_nscursor (nscursor, GDK_BLANK_CURSOR);
+}
+
 static gboolean
 get_bit (const guchar *data,
          gint          width,
@@ -79,7 +94,7 @@ create_builtin_cursor (GdkCursorType cursor_type)
   NSImage *image;
   NSCursor *nscursor;
 
-  if (cursor_type >= G_N_ELEMENTS (xcursors))
+  if (cursor_type >= G_N_ELEMENTS (xcursors) || cursor_type < 0)
     return NULL;
 
   cursor = cached_xcursors[cursor_type];
@@ -210,6 +225,10 @@ gdk_cursor_new_for_display (GdkDisplay    *display,
     case GDK_HAND2:
       nscursor = [NSCursor pointingHandCursor];
       break;
+    case GDK_CURSOR_IS_PIXMAP:
+      return NULL;
+    case GDK_BLANK_CURSOR:
+      return create_blank_cursor ();
     default:
       return gdk_cursor_ref (create_builtin_cursor (cursor_type));
     }